const commonInfo = {
    get serverAddr() {// 此处定义的是服务器地址
        return "/device-manage/f/entrance"
    },
    get ftpServer() {
        return localStorage.getItem("ftpPath");
    },
    set ftpServer(newValue) {
        localStorage.setItem("ftpPath", newValue);// localStorage写在本地缓存的数据，作用类似Cookie
    },
};

const userData = {
    /**
     * userToken用户登录标识 写入：CommonInfo.userToken="123";
     * 使用：console.log(CommonInfo.userToken);
     */
    get userToken() {
        return localStorage.getItem("userToken");
    },
    set userToken(newValue) {
        localStorage.setItem("userToken", newValue);// localStorage写在本地缓存的数据
    },

    /**
     * uid用户账号 写入举例：CommonInfo.uid="123"; 使用举例：console.log(CommonInfo.uid);
     */
    get uid() {
        return localStorage.getItem("uid");
    },
    set uid(newValue) {
        localStorage.setItem("uid", newValue);// localStorage写在本地缓存的数据，作用类似Cookie
    },

    /**
     * 用户信息，如手机号 id 等 使用举例：console.log(CommonInfo.userInfo.name);
     * 写入举例：CommonInfo.userInfo = {name:"test"};
     */
    get userInfo() {
        var userInfo = localStorage.getItem("userInfo");
        return userInfo ? JSON.parse(userInfo) : {};// 返回转成的JSON对象
    },
    set userInfo(newValue) {
        localStorage.setItem("userInfo", JSON.stringify(newValue));// 以字符串形式保存
    },

    get userRole() {
        var userRole = localStorage.getItem("userRole");
        return userRole ? JSON.parse(userRole) : {};// 返回转成的JSON对象
    },
    set userRole(newValue) {
        localStorage.setItem("userRole", JSON.stringify(newValue));// 以字符串形式保存
    }
};

const utils = {
    /**
     * 测试模式（开启手动登录）
     */
    debugMODE:false,

    /**
	 * 检查当前用户是否登陆
	 */
    checkLogin: logout => {
        var uid = userData.uid;// 获取uid
        if (!uid) {// 如无id
            if (logout) {
                utils.logoff();// 注销用户
                return false;
            } else {
                return false;
            }
        } else {
            return true;
        }
    },

    /**
	 * 注销当前用户
	 */
    logoff: function () {
        // 清空用户数据
        userData.uid = "";
        userData.userToken = "";
        userData.userInfo = {};
    },
    /**
	 * 输入验证方法
     * param:
     *  verifyConfig:{  验证设置
     *      canEmpty: 能否为空标记,
     *      verifyFunction: 验证函数, 优先执行，返回值应为boolean类型
     *      verifyRegExp: 验证正则表达式, 其次执行正则表达式（可为Array，多正则表达式验证）
     *                    如果为多正则验证，则其格式为[{
     *                       reg: 正则表达式,
     *                       type: 正则类型,
     *                       msg: 错误信息
     *                    }]
     *      verifyRegType: 正则类型（匹配错误值为true，匹配正确值为false）
     *      title: '', 标题
     *      errorMsg: '' 错误提示 如为空则错误信息为"title+格式错误",
     * }
     *  inputVal 如为Array则取其第一项为主要验证字符串，其他值则判断是否与第一项相等。
     * return:{
     *  isRight: boolean 判断结果
     *  errorMsg: 错误信息
     * }
	 */
    verify: (verifyConfig = {
        canEmpty: false,
        verifyFunction: null,
        verifyRegExp: null,
        verifyRegType: false,
        title: '',
        errorMsg: ''
    }, inputVal) => {
        let val = inputVal;
        if (Array.isArray(inputVal)) {
            // 如为Array则取其第一项为主要验证字符串
            val = inputVal[0];
        }
        if (!verifyConfig.canEmpty && !val) {//非空验证
            return {
                errorMsg: verifyConfig.title + '不能为空',
                isRight: false
            }
        }
        if (verifyConfig.verifyFunction && typeof verifyConfig.verifyFunction === 'function') {
            //如果有verifyFunction，且为Function，则执行验证函数
            return {
                isRight: verifyConfig.verifyFunction(inputVal),
                errorMsg: verifyConfig.errorMsg ? verifyConfig.errorMsg : verifyConfig.title + '格式错误'
            }
        } else if (verifyConfig.verifyRegExp) {
            //如果有verifyRegExp，则执行正则表达式验证
            let result = false;
            let errorMsg;
            if (Array.isArray(verifyConfig.verifyRegExp)) {
                //如为Array则需验证多次
                for (let reg of verifyConfig.verifyRegExp) {
                    if (reg.reg.test(val) !== reg.type) {
                        result = true;
                    } else {
                        errorMsg = reg.msg ? reg.msg : verifyConfig.errorMsg ? verifyConfig.errorMsg : verifyConfig.title + '格式错误';
                        return {
                            isRight: result,
                            errorMsg: errorMsg
                        };
                    }
                }
            } else {
                //不为Array只用验证一次
                if (verifyConfig.verifyRegExp.test(val) !== verifyConfig.verType) {
                    result = true;
                } else {
                    errorMsg = verifyConfig.errorMsg ? verifyConfig.errorMsg : verifyConfig.title + '格式错误'
                }
                return {
                    isRight: result,
                    errorMsg: errorMsg
                };
            }
        }
    },
    /**
     * 时间格式化,
     *  time: 时间戳（number）默认为当前时间
     *  type: 包含内容 (String) 默认为 'YMDhms' 包含日期与时间
     *  dformat: (String) 默认为 'yyyy-mm-dd' eg:2019-01-28
     *         'local' eg:2019年01月28日
     *  tformat: (String) 默认为 'hh:mm:ss' eg: 17:21:30
     *         'local' eg: 17时21分30秒
     */
    timeFomat: (time, format = 'yyyy-MM-dd hh:mm:ss') => {
        let timeObj = time ? new Date(parseInt(time)) : new Date();
        var o = {
            "M+": timeObj.getMonth() + 1,                 //月份
            "d+": timeObj.getDate(),                    //日
            "h+": timeObj.getHours(),                   //小时
            "m+": timeObj.getMinutes(),                 //分
            "s+": timeObj.getSeconds(),                 //秒
            "S": timeObj.getMilliseconds()             //毫秒   
        };
        if (/(y+)/.test(format))
            format = format.replace(RegExp.$1, (timeObj.getFullYear() + "").substr(4 - RegExp.$1.length));
        for (var k in o)
            if (new RegExp("(" + k + ")").test(format))
                format = format.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
        return format;
    },
    checkRole: (roleEnName) => {
        if (userData.userRole) {
            for (let role of userData.userRole) {
                if (role.roleEnName === roleEnName) {
                    return true;
                }
            }
        }
        return false;
    }
}

export {
    commonInfo,
    userData,
    utils
}